/**
 * 封装axios 请求
 * 步骤：
 * 1. 引入axios包/插件
 * 2. 使用axios.create({})=> 创建一个自己的axios实例
 * 3. 导出创建的axios实例
 */

import axios from 'axios'
// 获取登录信息
import { getToken } from '@/utils/store'
// 导入loading组件
import { Loading } from 'element-ui'

import JBig from 'json-bigint'

//  创建自定义的axios实例
const myRequest = axios.create({
  // 请求后台地址的域名/IP
  baseURL: 'http://ttapi.research.itcast.cn/',
  // `transformResponse` allows changes to the response data to be made before
  // it is passed to then/catch
  // 接口请求成功之后=》处理后台返回的数据
  /**
   * data =》 后台返回的对象字符串
   */
  transformResponse: [function (data) {
    // Do whatever you want to transform the data
    // 使用json-bigint格式化后台返回的数据=》解决大数失真问题
    // console.log(1)
    try {
      return JBig.parse(data)
    } catch (error) {
      console.log(error)
      return data
    }
  }
    // function (data) {
    //   // console.log(2, data)
    //   return data
    // }
  ]
})

// 定义loading实例
let loadingInstance

// 添加拦截器
// 请求拦截器=》发请求之前
// Add a request interceptor
myRequest.interceptors.request.use(function (config) {
  // Do something before request is sent
  // console.log('1. 请求拦截器=》发请求之前')
  // 请求开始=》显示loading
  loadingInstance = Loading.service({ text: '努力💪加载中...', background: 'rgba(0,0,0,.6)' })
  /**
   * 🙆‍统一添加headers部分的token
   * 需要排除：登录、注册等
   */
  // console.log(config)
  if (!config.url.includes('/authorizations')) {
    // 追加Authorization字段
    config.headers.Authorization = `Bearer ${getToken().token}`
  }
  return config
}, function (error) {
  // Do something with request error
  return Promise.reject(error)
})

// 响应拦截器=》请求成功之后（还没到页面）
// Add a response interceptor
myRequest.interceptors.response.use(function (response) {
  // Do something with response data
  // console.log('2. 响应拦截器=》请求成功之后（还没到页面）')
  // 关闭loading
  setTimeout(() => loadingInstance.close(), 600)
  return response
}, function (error) {
  // 关闭loading
  loadingInstance.close()
  // Do something with response error
  return Promise.reject(error)
})

// 导出
export default myRequest
